
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package itm.dao.administracion;

//~--- non-JDK imports --------------------------------------------------------
import itm.exception.ControlException;

import itm.vo.administracion.IndicadoresVO;

//~--- JDK imports ------------------------------------------------------------

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import itm.exception.DAOException;
import itm.vo.administracion.EtiquetaVO;

/**
 *
 * @author BISA20
 */
public class IndicadorDAO {

    private CallableStatement callStmt = null;
    private ResultSet res = null;
    private String sql = "";
    String temp = "";
    Connection dbConexion;

    public IndicadorDAO(Connection dbConexion) {
        this.dbConexion = dbConexion;
    }

    public String crearItemProyecto(IndicadoresVO indicadoresVO) throws ControlException, SQLException {
        String temp = "";

        try {
            sql = "{call ITM_CREAR_ITEM_EVALUACION_PROYECTO(?,?,?,?,?,?)}";
            callStmt = (CallableStatement) dbConexion.prepareCall(sql);
            callStmt.registerOutParameter(1, java.sql.Types.VARCHAR);
            callStmt.setString(2, indicadoresVO.getNombreItem());
            callStmt.setString(3, indicadoresVO.getId_criterio());
            callStmt.setString(4, indicadoresVO.getPeso());
            callStmt.setString(5, indicadoresVO.getIdtipoProyecto());
            callStmt.setString(6, indicadoresVO.getRequerido());
            callStmt.execute();
            temp = callStmt.getString(1);
        } catch (SQLException ce) {
            ce.getStackTrace();
        }

        return temp;
    }

    public String crearItemProducto(IndicadoresVO indicadoresVO) throws ControlException, SQLException {
        String temp = "";

        try {
            sql = "{call ITM_CREAR_ITEM_EVALUACION_PRODUCTO(?,?,?,?,?,?)}";
            callStmt = (CallableStatement) dbConexion.prepareCall(sql);
            callStmt.registerOutParameter(1, java.sql.Types.VARCHAR);
            callStmt.setString(2, indicadoresVO.getNombreItem());
            callStmt.setString(3, indicadoresVO.getId_criterio());
            callStmt.setString(4, indicadoresVO.getPeso());
            callStmt.setString(5, indicadoresVO.getIdTipoProducto());
            callStmt.setString(6, indicadoresVO.getRequerido());
            callStmt.execute();
            temp = callStmt.getString(1);
        } catch (SQLException ce) {
            ce.getStackTrace();
        }

        return temp;
    }

    public List<IndicadoresVO> listarIndicadores() throws Exception {
        List<IndicadoresVO> listaIndicadores = new ArrayList<IndicadoresVO>();
        IndicadoresVO indicadoresVO;

        try {
            sql = "{call ITM_LISTAR_CRITERIO_EVALUACION()}";
            callStmt = dbConexion.prepareCall(sql);
            res = callStmt.executeQuery();

            while (res.next()) {
                indicadoresVO = new IndicadoresVO();
                indicadoresVO.setId_criterio(res.getString(1));
                indicadoresVO.setNombreCriterio(res.getString(2));
                listaIndicadores.add(indicadoresVO);
            }
        } catch (Exception ce) {
            ce.getStackTrace();
        }

        return listaIndicadores;
    }

    public List<IndicadoresVO> listartipoProyecto() throws Exception {
        List<IndicadoresVO> listatipoProyecto = new ArrayList<IndicadoresVO>();
        IndicadoresVO indicadoresVO;

        try {
            sql = "{call ITM_LISTAR_TIPOS()}";
            callStmt = dbConexion.prepareCall(sql);
            res = callStmt.executeQuery();

            while (res.next()) {
                indicadoresVO = new IndicadoresVO();
                indicadoresVO.setIdtipoProyecto(res.getString(1));
                indicadoresVO.setNombreTipoProyecto(res.getString(2));
                listatipoProyecto.add(indicadoresVO);
            }
        } catch (Exception ce) {
            ce.getStackTrace();
        }

        return listatipoProyecto;
    }

    public List<IndicadoresVO> listartipoProductos() throws Exception {
        List<IndicadoresVO> listatipoProducto = new ArrayList<IndicadoresVO>();
        IndicadoresVO indicadoresVO;

        try {
            sql = "{call ITM_LISTAR_TIPO_PRODUCTO()}";
            callStmt = dbConexion.prepareCall(sql);
            res = callStmt.executeQuery();

            while (res.next()) {
                indicadoresVO = new IndicadoresVO();
                indicadoresVO.setIdTipoProducto(res.getString(1));
                indicadoresVO.setNombreTipoProducto(res.getString(2));
                listatipoProducto.add(indicadoresVO);
            }
        } catch (Exception ce) {
            ce.getStackTrace();
        }

        return listatipoProducto;
    }

    public List<IndicadoresVO> consultarProyectos(IndicadoresVO indicadoresVO, long idCategoria) throws ControlException, SQLException {
        List<IndicadoresVO> listaIndicadores = new ArrayList<IndicadoresVO>();

        try {
            sql = "{call ITM_CONSULTAR_ITEM_PROYECTO(?)}";
            callStmt = dbConexion.prepareCall(sql);
            callStmt.setLong(1, idCategoria);
            res = callStmt.executeQuery();

            while (res.next()) {
                indicadoresVO = new IndicadoresVO();
                indicadoresVO.setNombreItem(res.getString(1));
                indicadoresVO.setNombreCriterio(res.getString(2));
                indicadoresVO.setIdtipoProyecto(res.getString(3));
                indicadoresVO.setNombreTipoProyecto(res.getString(4));
                indicadoresVO.setPeso(res.getString(5));
                indicadoresVO.setRequerido(res.getString(6));
                indicadoresVO.setIdItem(res.getString(7));
                listaIndicadores.add(indicadoresVO);
            }
        } catch (SQLException ce) {
            ce.getStackTrace();
        }

        return listaIndicadores;
    }

    public List<IndicadoresVO> consultarProductos(IndicadoresVO indicadoresVO, long idCriterio) throws ControlException, SQLException {
        List<IndicadoresVO> listaIndicadoresProductos = new ArrayList<IndicadoresVO>();

        try {
            sql = "{call ITM_CONSULTAR_ITEM_PRODUCTO(?)}";
            callStmt = dbConexion.prepareCall(sql);
            callStmt.setLong(1, idCriterio);
            res = callStmt.executeQuery();

            while (res.next()) {
                indicadoresVO = new IndicadoresVO();
                indicadoresVO.setNombreItem(res.getString(1));
                indicadoresVO.setNombreCriterio(res.getString(2));
                indicadoresVO.setIdTipoProducto(res.getString(3));
                indicadoresVO.setNombreTipoProducto(res.getString(4));
                indicadoresVO.setPeso(res.getString(5));
                indicadoresVO.setRequerido(res.getString(6));
                indicadoresVO.setIdItem(res.getString(7));
                listaIndicadoresProductos.add(indicadoresVO);
            }
        } catch (SQLException ce) {
            ce.getStackTrace();
        }

        return listaIndicadoresProductos;
    }

    public String eliminarItem(IndicadoresVO indicadoresVO) throws ControlException, SQLException {
        try {
            sql = "{call ITM_ELIMINAR_ITEM(?,?)}";
            callStmt = (CallableStatement) dbConexion.prepareCall(sql);
            callStmt.registerOutParameter(1, java.sql.Types.VARCHAR);
            callStmt.setString(2, indicadoresVO.getNombreItem());
            callStmt.execute();
            temp = callStmt.getString(1);
        } catch (SQLException ce) {
            ce.getStackTrace();
        }

        return temp;
    }

    public IndicadoresVO consultarItemProyecto(IndicadoresVO indicadoresVO) throws ControlException, SQLException {

        // indicadoresVO=new IndicadoresVO();
        try {
            sql = "{call ITM_CONSULTAR_ITEM_ESPECIFICO(?, ?)}";
            callStmt = dbConexion.prepareCall(sql);
            callStmt.setString(1, indicadoresVO.getIdItem());
            callStmt.setString(2, indicadoresVO.getIdtipoProyecto());
            res = callStmt.executeQuery();

            if (res.next()) {
                indicadoresVO.setNombreItem(res.getString(1));
                indicadoresVO.setId_criterio(res.getString(2));
                indicadoresVO.setNombreCriterio(res.getString(3));
                indicadoresVO.setIdtipoProyecto(res.getString(4));
                indicadoresVO.setNombreTipoProyecto(res.getString(5));
                indicadoresVO.setPeso(res.getString(6));
                indicadoresVO.setRequerido(res.getString(7));
                indicadoresVO.setIdItem(res.getString(8));

            // listaPersonas.add(personaVO);
            }
        } catch (SQLException ce) {
            ce.getStackTrace();
        }

        return indicadoresVO;
    }

    public IndicadoresVO consultarItemProducto(IndicadoresVO indicadoresVO) throws ControlException, SQLException {

        // indicadoresVO=new IndicadoresVO();
        try {
            sql = "{call ITM_CONSULTAR_ITEM_ESPECIFICO_PRODUCTO(?, ?)}";
            callStmt = dbConexion.prepareCall(sql);
            callStmt.setString(1, indicadoresVO.getIdItem());
            callStmt.setString(2, indicadoresVO.getIdTipoProducto());
            res = callStmt.executeQuery();

            if (res.next()) {
                indicadoresVO.setNombreItem(res.getString(1));
                indicadoresVO.setId_criterio(res.getString(2));
                indicadoresVO.setNombreCriterio(res.getString(3));
                indicadoresVO.setIdTipoProducto(res.getString(4));
                indicadoresVO.setNombreTipoProducto(res.getString(5));
                indicadoresVO.setPeso(res.getString(6));
                indicadoresVO.setRequerido(res.getString(7));
                indicadoresVO.setIdItem(res.getString(8));

            // listaPersonas.add(personaVO);
            }
        } catch (SQLException ce) {
            ce.getStackTrace();
        }

        return indicadoresVO;
    }

    public String actualizarItemProyecto(IndicadoresVO indicadoresVO) throws ControlException, SQLException {
        String temp = "";

        try {
            sql = "{call ITM_ACTUALIZAR_ITEM_EVALUACION_PROYECTO(?,?,?,?,?,?,?)}";
            callStmt = (CallableStatement) dbConexion.prepareCall(sql);
            callStmt.registerOutParameter(1, java.sql.Types.VARCHAR);
            callStmt.setString(2, indicadoresVO.getIdItem());
            callStmt.setString(3, indicadoresVO.getNombreItem());
            callStmt.setString(4, indicadoresVO.getId_criterio());
            callStmt.setString(5, indicadoresVO.getPeso());
            callStmt.setString(6, indicadoresVO.getIdtipoProyecto());
            callStmt.setString(7, indicadoresVO.getRequerido());
            callStmt.execute();
            temp = callStmt.getString(1);

            String qq = temp;
        } catch (SQLException ce) {
            ce.getStackTrace();
        }

        return temp;
    }

    public String actualizarItemProducto(IndicadoresVO indicadoresVO) throws ControlException, SQLException {
        String tem = "";

        try {
            sql = "{call ITM_ACTUALIZAR_ITEM_EVALUACION_PRODUCTO(?,?,?,?,?,?,?)}";
            callStmt = (CallableStatement) dbConexion.prepareCall(sql);
            callStmt.registerOutParameter(1, java.sql.Types.VARCHAR);
            callStmt.setString(2, indicadoresVO.getIdItem());
            callStmt.setString(3, indicadoresVO.getNombreItem());
            callStmt.setString(4, indicadoresVO.getId_criterio());
            callStmt.setString(5, indicadoresVO.getPeso());
            callStmt.setString(6, indicadoresVO.getIdTipoProducto());
            callStmt.setString(7, indicadoresVO.getRequerido());
            callStmt.execute();
            tem = callStmt.getString(1);

            String qq = tem;
        } catch (SQLException ce) {
            ce.getStackTrace();
        }

        return tem;
    }

    public void crearEtiqueta(String tipoEtiqueta, String nombreEtiqueta) throws DAOException {
        try {
            sql = "{call PRC_ITM_CREAR_ETIQUETA(?,?)}";
            callStmt = dbConexion.prepareCall(sql);
            callStmt.setString(1, tipoEtiqueta);
            callStmt.setString(2, nombreEtiqueta);
            callStmt.execute();
        } catch (SQLException ex) {
            Logger.getLogger(IndicadorDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new DAOException("Error al crear la Etiqueta", ex);
        }

    }

    public void crearEtiqueta(String tipoEtiqueta, String nombreEtiqueta, double porcentajeEtiqueta) throws DAOException {
        try {
            sql = "{call PRC_ITM_CREAR_ETIQUETA(?,?,?)}";
            callStmt = dbConexion.prepareCall(sql);
            callStmt.setString(1, tipoEtiqueta);
            callStmt.setString(2, nombreEtiqueta);
            callStmt.setDouble(3, porcentajeEtiqueta);
            callStmt.execute();
        } catch (SQLException ex) {
            Logger.getLogger(IndicadorDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new DAOException("Error al crear la Etiqueta", ex);
        }

    }

    public List<EtiquetaVO> listarEtiquetasRequeridas()throws DAOException{
        List<EtiquetaVO> lista = new ArrayList<EtiquetaVO>();
        EtiquetaVO etiqueta;
        try {
            sql = "{call PRC_ITM_LISTAR_ETI_REQUE}";
            callStmt = dbConexion.prepareCall(sql);
            res = callStmt.executeQuery();
            while(res.next()){
                etiqueta = new EtiquetaVO();
                etiqueta.setIdEtiqueta(res.getLong(1));
                etiqueta.setNombreEtiqueta(res.getString(2));
                etiqueta.setPorcentaje(res.getDouble(3));
                etiqueta.setTipoEtiqueta("Requerido");
                lista.add(etiqueta);
            }
            return lista;
        } catch (SQLException ex) {
            Logger.getLogger(IndicadorDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new DAOException("Erro al consultar datos", ex);
        }

    }

    public List<EtiquetaVO> listarEtiquetasOpcionales(List<EtiquetaVO> lista)throws DAOException{
        EtiquetaVO etiqueta;
        try {
            sql = "{call PRC_ITM_LISTAR_ETI_OPCIO}";
            callStmt = dbConexion.prepareCall(sql);
            res = callStmt.executeQuery();
            while(res.next()){
                etiqueta = new EtiquetaVO();
                etiqueta.setIdEtiqueta(res.getLong(1));
                etiqueta.setNombreEtiqueta(res.getString(2));
                etiqueta.setPorcentaje(res.getDouble(3));
                etiqueta.setTipoEtiqueta("Opcional");
                lista.add(etiqueta);
            }
            return lista;
        } catch (SQLException ex) {
            Logger.getLogger(IndicadorDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new DAOException("Erro al consultar datos", ex);
        }

    }

    public void modificarEtiqueta(EtiquetaVO etiqueta)throws DAOException{
        try {
            sql = "{call PRC_ITM_MODIFICAR_ETIQUETA(?,?,?,?)}";
            callStmt = dbConexion.prepareCall(sql);
            callStmt.setLong(1, etiqueta.getIdEtiqueta());
            callStmt.setString(2, etiqueta.getNombreEtiqueta());
            callStmt.setString(3, etiqueta.getTipoEtiqueta());
            callStmt.setDouble(4, etiqueta.getPorcentaje());
            callStmt.execute();
        } catch (SQLException ex) {
            Logger.getLogger(IndicadorDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new DAOException("Error al actualizar", ex);
        }
    }

    public void eliminarEtiqueta(EtiquetaVO etiqueta)throws DAOException{
        try {
            sql = "{call PRC_ITM_ELIMINAR_ETIQUETA(?,?)}";
            callStmt = dbConexion.prepareCall(sql);
            callStmt.setLong(1, etiqueta.getIdEtiqueta());
            callStmt.setString(2, etiqueta.getTipoEtiqueta());
            callStmt.execute();
        } catch (SQLException ex) {
            Logger.getLogger(IndicadorDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new DAOException("Error al eliminar", ex);
        }

    }

    public List<EtiquetaVO> consultarEtiqueta(String tipoEtiqueta)throws DAOException{
        List<EtiquetaVO> lista = new ArrayList<EtiquetaVO>();
        EtiquetaVO etiqueta;
        try {
            sql = "{call PRC_ITM_CONSULTAR_ETIQUETAS_CALIDAD(?)}";
            callStmt = dbConexion.prepareCall(sql);
            callStmt.setString(1, tipoEtiqueta);
            res = callStmt.executeQuery();
            while(res.next()){
                etiqueta = new EtiquetaVO();
                etiqueta.setIdEtiqueta(res.getLong(1));
                etiqueta.setNombreEtiqueta(res.getString(2));
                etiqueta.setPorcentaje(res.getDouble(3));
                etiqueta.setTipoEtiqueta(tipoEtiqueta);
                lista.add(etiqueta);
            }
            return lista;
        } catch (SQLException ex) {
            Logger.getLogger(IndicadorDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new DAOException("Error al consultar datos", ex);
        }
    }

    public List<EtiquetaVO> consultarEtiqueta(String tipoEtiqueta, String nombreEtiqueta)throws DAOException{
        List<EtiquetaVO> lista = new ArrayList<EtiquetaVO>();
        EtiquetaVO etiqueta;
        try {
            sql = "{call PRC_ITM_CONSULTAR_ETIQUETAS_CALIDAD(?,?)}";
            callStmt = dbConexion.prepareCall(sql);
            callStmt.setString(1, tipoEtiqueta);
            callStmt.setString(2, nombreEtiqueta);
            res = callStmt.executeQuery();
            while(res.next()){
                etiqueta = new EtiquetaVO();
                etiqueta.setIdEtiqueta(res.getLong(1));
                etiqueta.setNombreEtiqueta(res.getString(2));
                etiqueta.setPorcentaje(res.getDouble(3));
                etiqueta.setTipoEtiqueta(tipoEtiqueta);
                lista.add(etiqueta);
            }
            return lista;
        } catch (SQLException ex) {
            Logger.getLogger(IndicadorDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new DAOException("Error al consultar datos", ex);
        }
    }
}
